From b9ae4c57de95a7d73640cce5776540d8d841b0c2 Mon Sep 17 00:00:00 2001
From: Nobuhiro Iwamatsu <iwamatsu@debian.org>
Date: Fri, 6 May 2022 16:16:30 +0900
Subject: [PATCH] renderer: Convert Gtk2 to Gtk3

Description: renderer: Convert Gtk2 to Gtk3
Forwarded: Not need
Last-Update: 2022-05-07

Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@debian.org>
---
 src/renderer/mozc_renderer_main.cc          |  2 +-
 src/renderer/renderer.gyp                   |  7 +++----
 src/renderer/unix/candidate_window.cc       |  4 ++--
 src/renderer/unix/gtk_wrapper.cc            |  4 ++--
 src/renderer/unix/infolist_window.cc        |  4 ++--
 src/renderer/unix/pango_wrapper.cc          | 15 +++------------
 src/renderer/unix/pango_wrapper.h           |  3 +--
 src/renderer/unix/text_renderer.cc          |  5 ++---
 src/renderer/unix/text_renderer.h           |  3 +--
 src/renderer/unix/text_renderer_interface.h |  2 +-
 10 files changed, 18 insertions(+), 31 deletions(-)

diff --git a/src/renderer/mozc_renderer_main.cc b/src/renderer/mozc_renderer_main.cc
index 85a0ae10..3b596d67 100644
--- a/src/renderer/mozc_renderer_main.cc
+++ b/src/renderer/mozc_renderer_main.cc
@@ -80,7 +80,7 @@ int main(int argc, char *argv[]) {
 #ifdef OS_WIN
   mozc::ScopedCOMInitializer com_initializer;
 #elif defined(ENABLE_GTK_RENDERER)
-  gtk_set_locale();
+  setlocale(LC_ALL, "");
 #if !GLIB_CHECK_VERSION(2, 31, 0)
   // There are not g_thread_init function in glib>=2.31.0.
   // http://developer.gnome.org/glib/2.31/glib-Deprecated-Thread-APIs.html#g-thread-init
diff --git a/src/renderer/renderer.gyp b/src/renderer/renderer.gyp
index 78eb6a75..34141a4a 100644
--- a/src/renderer/renderer.gyp
+++ b/src/renderer/renderer.gyp
@@ -532,15 +532,14 @@
           # Required 'cflags' and 'link_settings' will be automatically
           # injected into any target which directly or indirectly depends
           # on this target.
-          'target_name': 'gtk2_build_environment',
+          'target_name': 'gtk3_build_environment',
           'type': 'none',
           'variables': {
             'target_pkgs' : [
               'glib-2.0',
               'gobject-2.0',
               'gthread-2.0',
-              'gtk+-2.0',
-              'gdk-2.0',
+              'gtk+-3.0',
             ],
           },
           'all_dependent_settings': {
@@ -583,7 +582,7 @@
             '../ipc/ipc.gyp:ipc',
             '../protocol/protocol.gyp:genproto_config_proto#host',
             '../protocol/protocol.gyp:renderer_proto',
-            'gtk2_build_environment',
+            'gtk3_build_environment',
             'renderer_server',
             'renderer_style_handler',
             'table_layout',
diff --git a/src/renderer/unix/candidate_window.cc b/src/renderer/unix/candidate_window.cc
index bb0a346b..287f6871 100644
--- a/src/renderer/unix/candidate_window.cc
+++ b/src/renderer/unix/candidate_window.cc
@@ -85,7 +85,7 @@ CandidateWindow::CandidateWindow(TableLayoutInterface *table_layout,
 
 bool CandidateWindow::OnPaint(GtkWidget *widget, GdkEventExpose *event) {
   draw_tool_->Reset(
-      cairo_factory_->CreateCairoInstance(GetCanvasWidget()->window));
+      cairo_factory_->CreateCairoInstance(gtk_widget_get_window(GetCanvasWidget())));
 
   DrawBackground();
   DrawShortcutBackground();
@@ -263,7 +263,7 @@ void CandidateWindow::DrawFrame() {
 }
 
 void CandidateWindow::Initialize() {
-  text_renderer_->Initialize(GetCanvasWidget()->window);
+  text_renderer_->Initialize(GetCanvasWidget());
 }
 
 void CandidateWindow::UpdateScrollBarSize() {
diff --git a/src/renderer/unix/gtk_wrapper.cc b/src/renderer/unix/gtk_wrapper.cc
index 83d206d7..92c5483f 100644
--- a/src/renderer/unix/gtk_wrapper.cc
+++ b/src/renderer/unix/gtk_wrapper.cc
@@ -49,7 +49,7 @@ void GtkWrapper::GSignalConnect(gpointer instance, const gchar *signal,
 }
 
 void GtkWrapper::GtkWidgetHideAll(GtkWidget *widget) {
-  gtk_widget_hide_all(widget);
+  gtk_widget_hide(widget);
 }
 
 void GtkWrapper::GtkWidgetShowAll(GtkWidget *widget) {
@@ -135,7 +135,7 @@ void GtkWrapper::GtkWidgetRealize(GtkWidget *widget) {
 
 void GtkWrapper::GdkWindowSetTypeHint(GtkWidget *widget,
                                       GdkWindowTypeHint hint) {
-  gdk_window_set_type_hint(widget->window, hint);
+  gdk_window_set_type_hint(gtk_widget_get_window(widget), hint);
 }
 
 }  // namespace gtk
diff --git a/src/renderer/unix/infolist_window.cc b/src/renderer/unix/infolist_window.cc
index 253f9659..f76f4c93 100644
--- a/src/renderer/unix/infolist_window.cc
+++ b/src/renderer/unix/infolist_window.cc
@@ -100,7 +100,7 @@ Rect InfolistWindow::GetCandidateColumnInClientCord() const {
 
 bool InfolistWindow::OnPaint(GtkWidget *widget, GdkEventExpose *event) {
   draw_tool_->Reset(
-      cairo_factory_->CreateCairoInstance(GetCanvasWidget()->window));
+      cairo_factory_->CreateCairoInstance(gtk_widget_get_window(GetCanvasWidget())));
   Draw();
   return true;
 }
@@ -237,7 +237,7 @@ int InfolistWindow::DrawRow(int row, int ypos) {
 }
 
 void InfolistWindow::Initialize() {
-  text_renderer_->Initialize(GetCanvasWidget()->window);
+  text_renderer_->Initialize(GetCanvasWidget());
 }
 
 void InfolistWindow::ReloadFontConfig(const std::string &font_description) {
diff --git a/src/renderer/unix/pango_wrapper.cc b/src/renderer/unix/pango_wrapper.cc
index 8f87699a..545072a3 100644
--- a/src/renderer/unix/pango_wrapper.cc
+++ b/src/renderer/unix/pango_wrapper.cc
@@ -88,21 +88,12 @@ void PangoWrapper::AttributesUnref(PangoAttrList *attribute) {
 
 PangoContext *PangoWrapper::GetContext() { return context_; }
 
-PangoWrapper::PangoWrapper(GdkDrawable *drawable) : gc_(gdk_gc_new(drawable)) {
-  GdkScreen *screen = gdk_drawable_get_screen(drawable);
-  renderer_ = gdk_pango_renderer_new(screen);
-  gdk_pango_renderer_set_drawable(GDK_PANGO_RENDERER(renderer_), drawable);
-  gdk_pango_renderer_set_gc(GDK_PANGO_RENDERER(renderer_), gc_);
-  context_ = gdk_pango_context_get();
+PangoWrapper::PangoWrapper(GtkWidget *window) {
+  context_ = gtk_widget_get_pango_context(window);
 }
 
 PangoWrapper::~PangoWrapper() {
-  gdk_pango_renderer_set_override_color(GDK_PANGO_RENDERER(renderer_),
-                                        PANGO_RENDER_PART_FOREGROUND, nullptr);
-  gdk_pango_renderer_set_drawable(GDK_PANGO_RENDERER(renderer_), nullptr);
-  gdk_pango_renderer_set_gc(GDK_PANGO_RENDERER(renderer_), nullptr);
-  g_object_unref(gc_);
-  g_object_unref(context_);
+  g_object_unref(G_OBJECT(context_));
 }
 
 }  // namespace gtk
diff --git a/src/renderer/unix/pango_wrapper.h b/src/renderer/unix/pango_wrapper.h
index 7c41cc54..c7c7fb04 100644
--- a/src/renderer/unix/pango_wrapper.h
+++ b/src/renderer/unix/pango_wrapper.h
@@ -57,7 +57,7 @@ class PangoLayoutWrapper : public PangoLayoutWrapperInterface {
 
 class PangoWrapper : public PangoWrapperInterface {
  public:
-  explicit PangoWrapper(GdkDrawable *drawable);
+  explicit PangoWrapper(GtkWidget *window);
   virtual ~PangoWrapper();
   virtual void RendererDrawLayout(PangoLayoutWrapperInterface *layout, int x,
                                   int y);
@@ -68,7 +68,6 @@ class PangoWrapper : public PangoWrapperInterface {
  private:
   PangoRenderer *renderer_;
   PangoContext *context_;
-  GdkGC *gc_;
   DISALLOW_COPY_AND_ASSIGN(PangoWrapper);
 };
 }  // namespace gtk
diff --git a/src/renderer/unix/text_renderer.cc b/src/renderer/unix/text_renderer.cc
index 164f01bc..4ba96ea2 100644
--- a/src/renderer/unix/text_renderer.cc
+++ b/src/renderer/unix/text_renderer.cc
@@ -39,9 +39,8 @@ namespace gtk {
 
 TextRenderer::TextRenderer(FontSpecInterface *font_spec)
     : font_spec_(font_spec), pango_(nullptr) {}
-
-void TextRenderer::Initialize(GdkDrawable *drawable) {
-  pango_.reset(new PangoWrapper(drawable));
+void TextRenderer::Initialize(GtkWidget *window) {
+  pango_.reset(new PangoWrapper(window));
 }
 
 void TextRenderer::SetUpPangoLayout(const std::string &str,
diff --git a/src/renderer/unix/text_renderer.h b/src/renderer/unix/text_renderer.h
index c4cd2430..ba36b052 100644
--- a/src/renderer/unix/text_renderer.h
+++ b/src/renderer/unix/text_renderer.h
@@ -50,8 +50,7 @@ class TextRenderer : public TextRendererInterface {
  public:
   explicit TextRenderer(FontSpecInterface *font_spec);
   virtual ~TextRenderer() {}
-
-  virtual void Initialize(GdkDrawable *drawable);
+  virtual void Initialize(GtkWidget *window);
   virtual Size GetPixelSize(FontSpecInterface::FONT_TYPE font_type,
                             const std::string &str);
   virtual Size GetMultiLinePixelSize(FontSpecInterface::FONT_TYPE font_type,
diff --git a/src/renderer/unix/text_renderer_interface.h b/src/renderer/unix/text_renderer_interface.h
index db823217..9c569f6a 100644
--- a/src/renderer/unix/text_renderer_interface.h
+++ b/src/renderer/unix/text_renderer_interface.h
@@ -44,7 +44,7 @@ class TextRendererInterface {
   TextRendererInterface() {}
   virtual ~TextRendererInterface() {}
 
-  virtual void Initialize(GdkDrawable *drawable) = 0;
+  virtual void Initialize(GtkWidget *window) = 0;
   // Returns boundary rectangle size of actual rendered text.
   virtual Size GetPixelSize(FontSpecInterface::FONT_TYPE font_type,
                             const std::string &str) = 0;
-- 
2.36.0

